//
// Created by wsl on 2024/3/9.
//

#ifndef __DATASTRUCTURE_LINKQUEUE_H
#define __DATASTRUCTURE_LINKQUEUE_H

#include "DataStructure_common.h"

#define LinkQueue_Create(T) 	LinkQueue_create(sizeof(T))

//链表节点
typedef struct LinkQueue_N {
	T data;                                  //数据域
	struct LinkQueue_N *next;                //指针域，下一个节点地址
} LinkQueue_N, *LinkQueue_Node;

//链表对象
typedef struct {
	LinkQueue_Node head;                 //头指针
	LinkQueue_Node endElem;

	int length;                          //节点数量
	size_t dataSize;                    //数据域大小

} LinkQue, *LinkQueue;


DataStructure_Warning_Unused
LinkQueue LinkQueue_create(size_t dataSize);

DataStructure_Warning_Unused
Status LinkQueue_isEmpty(LinkQueue queue);

DataStructure_Warning_Unused
Status LinkQueue_enQueue(LinkQueue queue, T e);

DataStructure_Warning_Unused
Status LinkQueue_deQueue(LinkQueue queue, T buf);

DataStructure_Warning_Unused
Status LinkQueue_front(LinkQueue queue, T buf);

DataStructure_Warning_Unused
Status LinkQueue_clear(LinkQueue queue);

DataStructure_Warning_Unused
Status LinkQueue_destroy(LinkQueue *queue);

#endif //__DATASTRUCTURE_LINKQUEUE_H
